import turtle
import random  

# 初始化设置（适配樱花树的纵向生长）
t = turtle.Turtle()
screen = turtle.Screen()
screen.setup(600, 700)  # 纵向画布，给树枝向上生长留空间
screen.bgcolor("#F0F8FF")  # 淡蓝色背景（模拟春日天空）
t.speed(0)  # 最快绘图速度
t.hideturtle()
t.pencolor("#8B4513")  # 树干初始颜色（深棕色）


# 1. 递归画树枝（核心：自然弯曲、分层变细）
def draw_branch(length, thickness, angle):
    if length < 5:  # 树枝细到一定程度，停止递归（准备画樱花）
        draw_cherry(t.xcor(), t.ycor())  # 在树枝末端画樱花
        return
    
    # 调整画笔粗细（树枝越细，笔触越窄）
    t.pensize(thickness)
    
    # 画当前段树枝（略微弯曲，更自然）
    t.pendown()
    t.setheading(angle)  # 树枝生长方向
    t.forward(length)
    
    # 递归画左分枝（角度偏左、长度缩短、粗细变细）
    left_angle = angle + random.randint(20, 40)  # 随机偏角，避免对称
    draw_branch(length - random.randint(8, 12), thickness - 1, left_angle)
    
    # 递归画右分枝（角度偏右、长度缩短、粗细变细）
    right_angle = angle - random.randint(20, 40)
    draw_branch(length - random.randint(8, 12), thickness - 1, right_angle)
    
    # 退回当前树枝起点，继续画其他分枝
    t.penup()
    t.backward(length)


# 2. 画樱花（粉白小圆圈，点缀在树枝末端）
def draw_cherry(x, y):
    t.penup()
    t.goto(x, y)
    t.pendown()
    
    # 樱花颜色：随机粉/白，模拟自然深浅
    cherry_color = random.choice(["#FFC0CB", "#FFB6C1", "#FFF0F5", "#FFE4E1"])
    t.fillcolor(cherry_color)
    t.begin_fill()
    t.circle(random.randint(2, 4))  # 樱花大小随机（2-4像素）
    t.end_fill()


# 3. 画树干（从底部开始，向上生长）
def draw_trunk():
    t.penup()
    t.goto(0, -250)  # 树干起点（画布底部中间）
    t.setheading(90)  # 初始方向：向上
    draw_branch(length=60, thickness=6, angle=90)  # 主树枝（粗、长）


# 执行绘图（先树干→树枝→樱花，层层递进）
if __name__ == "__main__":
    draw_trunk()
    screen.exitonclick()  # 点击窗口关闭